function Cat(name,color){
    this.name=name;
    this.color=color;
    // 浪费内存，共享
    // 需要一个新的，构造函数之外的内存空间
    //this.type='猫科动物';
    /*this.eat=function(){
        console.log('eat 老鼠')
    }*/
}
//1. 省内存
//2. 所有实例共享prototype对象上的属性和方法
//3. 实例它是如何共享prototype对象呢
//4.this->constructor+prototype上
//如何区分对象本身的属性（constructor,),prototype对象上的属性
Cat.prototype.eat=function(){
    console.log('eat 老鼠')
}
Cat.prototype.type='猫科动物';
let cat1=new Cat('tom','黑色');// 从内存的角度看，分配了新的内存空间
let cat2=new Cat('mam','白色')
console.log(cat1.hasOwnProperty('name'),cat2.hasOwnProperty('type'));
//首先到ownProperties去查找,如果有，返回，可能没有，那就是继续到prototype
// 对象上去找
// js 什么语法来实现的  __proto__只要在原型对象上，也可以在直接调用
console.log(cat1.type,cat2.name,cat2.__proto__.type);// __proto__指向构造它的原型对象
// object 的 {}
console.log(cat2.toString());
console.log(cat2.__proto__.__proto__.__proto__);

